package com.eds.utils;

import java.util.Random;

public class RandomUtil {

    /**
     * 生成四位数字短信验证码
     *
     * @return 四位随机数字字符串
     */
    public static String buildSmsCode(int digit) {
        return buildCheckCode(digit, "0123456789");
    }

    /**
     * 生成全字符验证码（数字 + 大小写字母）
     *
     * @param digit 验证码位数
     * @return 随机验证码字符串
     */
    public static String buildFullCharCode(int digit) {
        String fullCharSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        return buildCheckCode(digit, fullCharSet);
    }


    /**
     * 通用验证码生成方法
     *
     * @param digit   验证码位数
     * @param charSet 字符集
     * @return 随机验证码字符串
     */
    private static String buildCheckCode(int digit, String charSet) {
        //判断是否为空
        if (digit <= 0) {
            throw new IllegalArgumentException("验证码位数必须大于0");
        }
        //创建一个StringBuilder用来拼接字符串
        StringBuilder stringBuilder = new StringBuilder();
        //生成随机数
        Random random = new Random();
        //循环生成随机字符
        for (int i = 0; i < digit; i++) {
            //使用random.nextInt(charSet.length())生成一个范围在[0, charSet.length())
            char ch = charSet.charAt(random.nextInt(charSet.length()));
            //根据索引获取对应的字符，并将其追加到 StringBuilder 对象中
            stringBuilder.append(ch);
        }
        //将stringBuilder转换成字符串返回
        return stringBuilder.toString();
    }

    /**
     * 生成随机验证码
     * @param digit 位数
     * @return 随机数
     */
    /*public static String buildCheckCode(int digit){
        //定义字符集：定义一个字符串 str，包含所有可能的数字字符（0123456789）
        String str = "0123456789";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < digit; i++) {
            char ch = str.charAt(random.nextInt(str.length()));
            sb.append(ch);
        }
        return sb.toString();
    }*/
}
